home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_a / mfwb.act < prev    next >
Text File  |  1995-04-22  |  8KB  |  602 lines

  1. ;More Fun With BOUNCE 
  2. ;by Joel Gluck 
  3. ;for ANALOG COMPUTING 
  4.  
  5. BYTE ARRAY xx(256),yy(256), 
  6.            xd(256),yd(256) 
  7. BYTE xc,yc,hidden,cmode,TIME=20, 
  8.      RANDOM=53770,CONSOL=53279, 
  9.      CURSC=708,CH=764,NEWCOL=710, 
  10.      dist=[0],audball=[0] 
  11. CARD num=[0],curspeed=[1500], 
  12.      ballspeed=[900] 
  13. CARD ARRAY linept(48) 
  14.  
  15.  
  16. PROC gr5init() 
  17. CARD scrn=88 
  18. BYTE line,BALLCOL=709,WALLCOL=710 
  19.  
  20. Graphics(5) 
  21. FOR line=0 TO 47 DO 
  22.   linept(line)=scrn+20*line 
  23. OD 
  24. BALLCOL=$0C 
  25. WALLCOL=$94 
  26. RETURN 
  27.  
  28.  
  29. PROC plot5(BYTE x,y,col) 
  30. BYTE POINTER pixel 
  31. BYTE ARRAY colfil= [0 85 170 255], 
  32.            mask= [63 207 243 252], 
  33.            mask2= [192 48 12 3] 
  34.  
  35. pixel = linept(y)+(x RSH 2) 
  36. pixel^ = pixel^ & mask(x & 3) 
  37.             % (colfil(col) 
  38.             & mask2(x & 3)) 
  39. RETURN 
  40.  
  41.  
  42. BYTE FUNC locate5(BYTE x,y) 
  43. BYTE POINTER pixel 
  44. BYTE ARRAY mask= [192 48 12 3] 
  45.  
  46. pixel = linept(y)+(x RSH 2) 
  47. RETURN((pixel^ & mask(x & 3)) RSH 
  48.        (((x & 3) XOR 3) LSH 1)) 
  49.  
  50.  
  51. PROC hline(BYTE y,c) 
  52. BYTE i 
  53.  
  54. FOR i = 0 TO 79 DO 
  55.   plot5(i,y,c) 
  56. OD 
  57. RETURN 
  58.  
  59.  
  60. PROC vline(BYTE x,c) 
  61. BYTE i 
  62.  
  63. FOR i = 0 TO 47 DO 
  64.   plot5(x,i,c) 
  65. OD 
  66. RETURN 
  67.  
  68.  
  69. PROC pauz(CARD p) 
  70. CARD i 
  71.  
  72. FOR i=1 TO p DO 
  73. OD 
  74. RETURN 
  75.  
  76.  
  77. PROC f16(BYTE x,y) 
  78. BYTE g,a,b 
  79.  
  80. g=Locate(x,y) 
  81. IF g=32 THEN 
  82.   RETURN 
  83. FI 
  84. g==+128 
  85. NEWCOL=15 
  86. b=y 
  87. DO 
  88.   color=0 
  89.   Plot(x,b) 
  90.   b==-1 
  91.   color=g 
  92.   Plot(x,b) 
  93.   IF b=2 THEN 
  94.     EXIT 
  95.   FI 
  96.   Sound(0,b,8,8) 
  97.   pauz(700+x*50) 
  98. OD 
  99. a=x 
  100. DO 
  101.   color=0 
  102.   Plot(a,b) 
  103.   a==+1 
  104.   color=g 
  105.   Plot(a,b) 
  106.   IF a=19 THEN 
  107.     EXIT 
  108.   FI 
  109.   Sound(0,a,8,8) 
  110.   pauz(700+x*50) 
  111. OD 
  112. color=0 
  113. Plot(a,b) 
  114. SndRst() 
  115. RETURN 
  116.  
  117.  
  118. PROC colburst(BYTE x,y) 
  119. BYTE g,c,a 
  120.  
  121. g=Locate(x,y) 
  122. IF g=32 THEN 
  123.   RETURN 
  124. FI 
  125. g=g+128 
  126. NEWCOL=(Rand(16) LSH 4) % 10 
  127. color=g 
  128. a=x-1 
  129. IF a>13 THEN 
  130.   a=0 
  131. FI 
  132. Plot(x,a) 
  133. DrawTo(x,y) 
  134. FOR c=0 TO 15 DO 
  135.   Sound(0,0,4,15-c) 
  136.   pauz(400) 
  137. OD 
  138. color=0 
  139. Plot(x,0) 
  140. DrawTo(x,y) 
  141. SndRst() 
  142. RETURN 
  143.  
  144.  
  145. PROC dropkick(BYTE x,y) 
  146. BYTE g,h,a,b 
  147.  
  148. g=Locate(x,y) 
  149. IF g=32 THEN 
  150.   RETURN 
  151. FI 
  152. g==+128 
  153. NEWCOL=152 
  154. b=y 
  155. DO 
  156.   color=0 
  157.   Plot(x,b) 
  158.   b==+1 
  159.   color=g 
  160.   Plot(x,b) 
  161.   IF b=23 THEN 
  162.     EXIT 
  163.   FI 
  164.   Sound(0,b+10+(x LSH 1),10,8) 
  165.   Sound(1,b+20+(x LSH 1),10,8) 
  166.   pauz(400) 
  167. OD 
  168. SndRst() 
  169. h=0 
  170. NEWCOL=159 
  171. a=x 
  172. DO 
  173.   color=h 
  174.   Plot(a,b) 
  175.   h=Locate(a+1,b-1) 
  176.   a==+1 
  177.   b==-1 
  178.   color=g 
  179.   Plot(a,b) 
  180.   IF a=18 OR b=1 THEN 
  181.     EXIT 
  182.   FI 
  183.   Sound(0,a-x,8,(b RSH 1)) 
  184.   pauz(800) 
  185. OD 
  186. color=0 
  187. Plot(a,b) 
  188. SndRst() 
  189. RETURN 
  190.  
  191.  
  192. PROC foo() 
  193. BYTE v 
  194.  
  195. FOR v=0 TO 15 DO 
  196.   Sound(0,255,10,15-v) 
  197.   Sound(1,0,8,8-(v RSH 1)) 
  198.   pauz(500) 
  199. OD 
  200. SndRst() 
  201. RETURN 
  202.  
  203.  
  204. PROC intro() 
  205. BYTE x 
  206.  
  207. Graphics(17) 
  208. CURSC=$08 
  209. Position(0,10) 
  210. PrintD(6,"MORE FUN WITH") 
  211. Position(0,12) 
  212. PrintD(6,"B O U N C E !") 
  213. Position(0,14) 
  214. PrintD(6,"BY JOEL GLUCK") 
  215. pauz(65000) 
  216. pauz(65000) 
  217. pauz(65000) 
  218. FOR x=0 TO 12 DO 
  219.   f16(12-x,10) 
  220. OD 
  221. FOR x=0 TO 12 DO 
  222.   colburst(x,12) 
  223. OD 
  224. FOR x=0 TO 12 DO 
  225.   dropkick(12-x,14) 
  226. OD 
  227. CURSC=$48 
  228. Position(14,1) 
  229. PrintD(6,"ANALOG") 
  230. foo() 
  231. Position(11,3) 
  232. PrintD(6,"COMPUTING") 
  233. foo() 
  234. Position(12,5) 
  235. PrintD(6,"FEBRUARY") 
  236. foo() 
  237. Position(16,7) 
  238. PrintD(6,"1985") 
  239. foo() 
  240. pauz(65000) 
  241. pauz(65000) 
  242. pauz(65000) 
  243. RETURN 
  244.  
  245.  
  246. PROC drawdoc() 
  247. BYTE CURS=752 
  248.  
  249. CURS=1 
  250. PutE() 
  251. Print("Use joystick and ") 
  252. PrintE("SPACE to draw/erase.") 
  253. Print("Hit B for balls, ") 
  254. PrintE("0-9 for brush speed.") 
  255. Print("ESC clrs balls; ") 
  256. PrintE("ctrl-ESC clrs screen.") 
  257. Print("Press START to Bounce!") 
  258. RETURN 
  259.  
  260.  
  261. PROC clearscrn() 
  262. BYTE a,b,g 
  263.  
  264. FOR b=1 TO 19 DO 
  265.   FOR a=1 TO 78 DO 
  266.     g=locate5(a,b) 
  267.     IF (g=2 OR CH>28) AND g>1 THEN 
  268.       plot5(a,b,0) 
  269.       Sound(0,b,6,4) 
  270.       IF CH=28 THEN 
  271.         pauz(300) 
  272.       FI 
  273.     FI 
  274.     g=locate5(a,39-b) 
  275.     IF (g=2 OR CH>28) AND g>1 THEN 
  276.       plot5(a,39-b,0) 
  277.       Sound(0,b,6,4) 
  278.       IF CH=28 THEN 
  279.         pauz(300) 
  280.       FI 
  281.     FI 
  282.   OD 
  283.   Sound(0,0,0,0) 
  284. OD 
  285. IF CH>28 OR hidden=2 THEN 
  286.   hidden=0 
  287. FI 
  288. RETURN 
  289.  
  290.  
  291. PROC movecursor(BYTE bflag) 
  292. BYTE g,STIK=632,TRIG=644,vol 
  293. BYTE ARRAY v=[2 2 2 0 2 1 1 1 0 2 0 
  294.               0 0 1 1 1 1 2 1 0 1 1] 
  295. INT cxd,cyd 
  296.  
  297. IF STIK<15 OR bflag=1 THEN 
  298.   cxd=v((STIK-5) LSH 1)-1 
  299.   cyd=v(((STIK-5) LSH 1) % 1)-1 
  300.   IF bflag=1 THEN 
  301.     cxd=2 
  302.   FI 
  303.   g=hidden 
  304.   IF TRIG THEN 
  305.     vol=4 
  306.   ELSE 
  307.     vol=10 
  308.     g=cmode*3 
  309.   FI 
  310.   Sound(0,(xc+yc)*cmode, 
  311.         8+(cmode LSH 1), 
  312.         vol-(cmode LSH 1)) 
  313.   plot5(xc,yc,g) 
  314.   xc==+cxd 
  315.   yc==+cyd 
  316.   IF xc<1 THEN 
  317.     xc=78 
  318.   FI 
  319.   IF xc>78 THEN 
  320.     xc=1 
  321.   FI 
  322.   IF yc<1 THEN 
  323.     yc=38 
  324.   FI 
  325.   IF yc>38 THEN 
  326.     yc=1 
  327.   FI 
  328.   hidden=locate5(xc,yc) 
  329.   plot5(xc,yc,1) 
  330. FI 
  331. RETURN 
  332.  
  333.  
  334. PROC audlayball() 
  335. BYTE i,j,k  
  336.  
  337. FOR j=0 TO 2 DO 
  338.   FOR i=j*50 TO j*50+20 DO 
  339.     Sound(0,i,10,15-j*6) 
  340.     pauz(100) 
  341.   OD 
  342. OD 
  343. Sound(0,0,0,0) 
  344. RETURN 
  345.  
  346.  
  347. BYTE FUNC number() 
  348. BYTE n,v 
  349.  
  350. v=CH 
  351. Open(2,"K:",4,1) 
  352. n=GetD(2) 
  353. Close(2) 
  354. CH=v 
  355. IF n>47 AND n<58 THEN 
  356.   RETURN(57-n) 
  357. ELSE 
  358.   RETURN(99) 
  359. FI 
  360.  
  361.  
  362. PROC audcmode() 
  363. BYTE n 
  364.  
  365. FOR n=1 TO 5 DO 
  366.   IF cmode THEN 
  367.     Sound(0,100-n*10,10,4) 
  368.   ELSE 
  369.     Sound(1,150-n*10,10,4) 
  370.     Sound(0,5-n,8,6) 
  371.   FI 
  372.   pauz(2000) 
  373.   SndRst() 
  374.   pauz(1000) 
  375. OD 
  376. RETURN 
  377.  
  378.  
  379. PROC cursor() 
  380. BYTE n 
  381.  
  382. IF CH<>255 THEN 
  383.   IF CH=33 THEN 
  384.     cmode==XOR 1 
  385.     audcmode() 
  386.   ELSEIF CH=28 OR CH=156 THEN 
  387.     clearscrn() 
  388.   ELSEIF CH=21 THEN 
  389.     hidden=2 
  390.     plot5(xc,yc,2) 
  391.     movecursor(1) 
  392.     audlayball() 
  393.   ELSE 
  394.     n=number() 
  395.     IF n<99 THEN 
  396.       curspeed=n*500 
  397.     FI 
  398.   FI 
  399.   CH=255 
  400. FI 
  401. movecursor(0) 
  402. RETURN 
  403.  
  404.  
  405. PROC bouncedoc() 
  406. CARD n 
  407.  
  408. PutE() 
  409. n=num 
  410. IF n=1 THEN 
  411.   PrintE("1 ball is bouncing.") 
  412. ELSE 
  413.   PrintC(n) 
  414.   PrintE(" balls are bouncing.") 
  415. FI 
  416. PrintE("Hit digits 0-9 for speed.") 
  417. Print("S changes sound focus, ") 
  418. PrintE("N nudges ball.") 
  419. Print("Press SELECT to Draw again.") 
  420. RETURN 
  421.  
  422.  
  423. PROC process(BYTE a,b) 
  424. BYTE g 
  425.  
  426. g=locate5(a,b) 
  427. IF g=2 THEN 
  428.   IF num<200 THEN 
  429.     xx(num)=a 
  430.     yy(num)=b 
  431.     num==+1 
  432.   ELSE 
  433.     plot5(a,b,0) 
  434.   FI 
  435. ELSEIF g=0 THEN 
  436.   plot5(a,b,1) 
  437. FI 
  438. RETURN 
  439.  
  440.  
  441. PROC ballinit() 
  442. BYTE a,b 
  443.  
  444. CURSC=$44 
  445. num=0 
  446. FOR b=1 TO 19 DO 
  447.   FOR a=1 TO 78 DO 
  448.     process(a,b) 
  449.     process(a,39-b) 
  450.   OD 
  451. OD 
  452. FOR a=0 TO num DO 
  453.   xd(a)=Rand(2) LSH 1 
  454.   yd(a)=Rand(2) LSH 1 
  455. OD 
  456. RETURN 
  457.  
  458.  
  459. PROC moveball(BYTE n) 
  460. BYTE g,pa,pb 
  461.  
  462. g=locate5(xx(n)+xd(n)-1,yy(n)+yd(n)-1) 
  463. IF g<2 THEN 
  464.   plot5(xx(n),yy(n),0) 
  465.   xx(n)=xx(n)+xd(n)-1 
  466.   yy(n)=yy(n)+yd(n)-1 
  467.   plot5(xx(n),yy(n),2) 
  468.   IF n=audball THEN 
  469.     dist==+1 
  470.   FI 
  471.   RETURN 
  472. ELSE 
  473.   pb=locate5(xx(n),yy(n)+yd(n)-1) 
  474.   pa=locate5(xx(n)+xd(n)-1,yy(n)) 
  475.   IF n=audball THEN 
  476.     IF dist THEN  
  477.       Sound(0,170-((38-dist) LSH 2), 
  478.             10,8) 
  479.       Sound(1,((38-dist) LSH 2), 
  480.             10,8) 
  481.     FI 
  482.     dist=0 
  483.     TIME=0 
  484.   FI 
  485.   IF pa>1 THEN 
  486.     xd(n)=2-xd(n) 
  487.     IF pb>1 THEN 
  488.       yd(n)=2-yd(n) 
  489.       RETURN 
  490.     ELSE 
  491.       plot5(xx(n),yy(n),0) 
  492.       yy(n)=yy(n)+yd(n)-1 
  493.       plot5(xx(n),yy(n),2) 
  494.       RETURN 
  495.     FI 
  496.   ELSEIF pb>1 THEN 
  497.     yd(n)=2-yd(n) 
  498.     plot5(xx(n),yy(n),0) 
  499.     xx(n)=xx(n)+xd(n)-1 
  500.     plot5(xx(n),yy(n),2) 
  501.     RETURN 
  502.   ELSEIF Rand(2) THEN 
  503.     xd(n)=2-xd(n) 
  504.   ELSE 
  505.     yd(n)=2-yd(n) 
  506.     RETURN 
  507.   FI 
  508. FI 
  509. RETURN 
  510.  
  511.  
  512. PROC cleanup() 
  513. BYTE a,b 
  514.  
  515. FOR b=1 TO 19 DO 
  516.   FOR a=1 TO 78 DO 
  517.     IF locate5(a,b)=1 THEN 
  518.       plot5(a,b,0) 
  519.     FI 
  520.     IF locate5(a,39-b)=1 THEN 
  521.       plot5(a,39-b,0) 
  522.     FI 
  523.   OD 
  524. OD 
  525. RETURN 
  526.  
  527.  
  528. PROC bounce() 
  529. CARD i 
  530. BYTE n 
  531.  
  532. ballinit() 
  533. bouncedoc() 
  534. audball=0 
  535. dist=0 
  536. IF num THEN 
  537.   DO 
  538.     FOR i=0 TO num-1 DO 
  539.       moveball(i) 
  540.       IF CH<>255 THEN 
  541.         IF CH=62 THEN 
  542.           audball==+1 
  543.           IF audball=num THEN 
  544.             audball=0 
  545.           FI 
  546.           dist=0 
  547.         ELSEIF CH=35 THEN 
  548.           xd(audball)=2-xd(audball) 
  549.         ELSE 
  550.           n=number() 
  551.           IF n<99 THEN 
  552.             ballspeed=n*n*100 
  553.           FI 
  554.         FI 
  555.         CH=255 
  556.       FI 
  557.       IF CONSOL=5 THEN 
  558.         EXIT 
  559.       FI 
  560.     OD 
  561.     pauz(ballspeed) 
  562.     IF TIME THEN 
  563.       SndRst() 
  564.     FI 
  565.     UNTIL CONSOL=5 
  566.   OD 
  567.   SndRst() 
  568. FI 
  569. cleanup() 
  570. RETURN 
  571.  
  572.  
  573. PROC MFWB() 
  574.  
  575. intro() 
  576. gr5init() 
  577. hline(0,3) 
  578. hline(39,3) 
  579. vline(0,3) 
  580. vline(79,3) 
  581. DO 
  582.   drawdoc() 
  583.   xc=39 
  584.   yc=19 
  585.   hidden=locate5(xc,yc) 
  586.   cmode=1 
  587.   plot5(xc,yc,1) 
  588.   DO 
  589.     cursor() 
  590.     CURSC=TIME 
  591.     pauz(curs